from simpy import Environment

from x_pc.core import Device, DeviceCost, DeviceCache


class TransportBiz(DeviceCost, DeviceCache):
    """
    传输 业务数据
    """
    # 编号
    id: str = None
    # 设备编号, 虚拟编号
    equ_code: str = None
    # 设备类型 401环穿 402传送 403AGV搬运
    equ_type: int = None
    # 工作时长
    work_time: int = None
    # 缓存数量，为空时缓存数量不限制
    cache_num: int = None
    # 工作类型，关联wops_work_type
    work_type: int = None
    # 是否启用 1启用 2不启用
    enable: int = None
    # 备注
    remark: str = None

    def __init__(self, **kwargs):
        for key in kwargs:
            if hasattr(self, key):
                setattr(self, key, kwargs[key])

    def cost(self, *args, **kwargs) -> float:
        """
        设备传输耗时
        :param args:
        :param kwargs:
        :return:
        """
        return self.work_time

    def cache_nums(self) -> int:
        """
        设备缓存数量
        :return:
        """
        return self.cache_num

    def __str__(self):
        return f'{self.__class__.__name__} (code={self.equ_code})'

    def __repr__(self):
        return self.__str__()


class Transport(Device, TransportBiz):
    """
    传送带设备配置

    TODO:
    - cache_num 有什么用？在哪块做的限制，怎么限制的
    - cache_num 为空时，是不是代表该运力无限(不会出现瓶颈)
    - remark需要进行拆分，不然没办法匹配任务 以获取相关业务信息
    """
    category: str = 'transport'

    def __init__(self, env: Environment, name: str, kwargs):
        Device.__init__(self, env, name)
        TransportBiz.__init__(self, **kwargs)

    def biz_init(self, **kwargs):
        """
        业务类字段 初始化
        :param kwargs:
        :return:
        """
        TransportBiz.__init__(self, **kwargs)

    @staticmethod
    def device_type() -> int:
        pass

    def device_code(self):
        return self.equ_code

    def loc(self):
        return self.device_code()

    def __str__(self):
        return TransportBiz.__str__(self)
